package club.kingyin.core;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * @author ：kingyin
 * @date ：创建于 2021/7/17 5:21 下午
 * @description ：BeanDefinition注册表
 * @modified By：
 * @version: 1.0.0
 */
public interface BeanDefinitionRegistry {

    Map<String, BeanDefinition> beanDefinitions = new ConcurrentHashMap<>();

    /**
     * 注册BeanDefinition
     * @param beanName 注册名
     * @param mbd bd
     */
    default void register(String beanName, BeanDefinition mbd) {
        beanDefinitions.put(beanName, mbd);
    }

    /**
     * 卸载BeanDefinition
     * @param beanName 名称
     * @return 卸载bd
     */
    default BeanDefinition remove(String beanName) {
        return beanDefinitions.remove(beanName);
    }

    /**
     * 判断某个Class 的 BeanDefinition 是否存在
     * @param classType class
     * @return 布尔
     */
    default boolean containsBeanClass(Class<?> classType) {

        Iterator<BeanDefinition> iterator = beanDefinitions.values().iterator();
        while (iterator.hasNext()) {
            BeanDefinition definition = iterator.next();
            if (definition.getBeanClass().equals(classType)) {
                return true;
            }
        }
        return false;
    }

    default Map<String, BeanDefinition> get() {
        return beanDefinitions;
    }

    default BeanDefinition get(String beanName) {
        return beanDefinitions.get(beanName);
    }
}
